// 一、数组：将多个数据有序的排列在一起，形成一个组合
// 二、数组的特点：
// 1.数组可以存放多个数据
// 2.数组里面的数据都是有顺序的
// 3.数组里面的数据可以是任意数据类型
// 4.数组里面的数据可以重复
// 5.数组是复杂数据类型（object）

// 三、创建数组
// // 1.字面量创建数组
// let arr=[];//创建空数组
// console.log(arr);
// // 2.构造函数创建数组
// let arr2=new Array();
// console.log(arr2);

// let arr=[2,4,"hello","world",undefined,null,true,false,[5,6,7],2,4];
// // 下标：0  1   2       3       4        5    6    7      8     9 10
// // console.log(arr);

// // 下标：从0开始，依次增加1
// //四、通过数组下标操作数组数据
// // 1.查（获取）
// console.log(arr[3]);//"world"
// console.log(arr[8]);//[ 5, 6, 7 ]
// console.log(arr[0]);//2
// // 2.增
// arr[11]=66;
// arr[20]=200;
// console.log(arr);
// console.log(arr[15]);//undefined
// console.log(arr[35]);//undefined

// // 3.改
// arr[9]=999;
// // console.log(arr);

// // 4.删:只是删除内容，不能删除位置，默认值是undefined
// delete arr[2];
// console.log(arr);
// console.log(arr[2]);//undefined


// 五、遍历数组
// 1.for循环
// let arr=[2,4,"hello","world",undefined,null,true,false,[5,6,7],2,4];
// i:表示数组下标
// console.log(arr.length);//11
// 下标的最大值=数组长度-1
// for(let i=0;i<arr.length;i++){
//     if(arr[i]*1===arr[i]){
//         console.log(arr[i]);
//     }
// }

// for(let i=arr.length-1;i>=0;i--){
//     console.log(arr[i]);
// }




// for(let i=5;i>=0;i--){
//     console.log(arr[i]);
// }
// 键值对  arr[i]=2  数组：键=下标 

// 2.for-in:遍历数组的下标
// i:表示下标，默认从0开始
// for(let i in arr){
//     console.log(arr[i]);
// }

// 3.for-of:遍历数组的值
// z:表示数组里面的值
// for(let z of arr){
//     console.log(z);
// }

// 4.forEach

// 5.迭代器：迭代复杂数据类型的通用方法
// keys():迭代数组的下标
// i:表示数组的下标
// for(let i of arr.keys()){
//     console.log(arr[i]);
// }

// values():迭代数组的值
// z:表示数组的值
// for(let z of arr.values()){
//     console.log(z);
// }

// entires():迭代数组的下标和值
// x:就是一个小数组，[下标，值]
// for(let x of arr.entries()){
//     console.log(x);
// }


// 六、解构数组:把复杂数据类型解构成简单数据类型
// let [a, ,c]=[1,2,3];
// console.log(a,c);
// 两个数之间交换值
// let x=10,y=20;
// 方法一：中间变量
// let temp=x;
// x=y;
// y=temp;
// console.log(x,y);

// 方法二：解构数组
// [x,y]=[y,x];
// console.log(x,y);

// 七、多维数组
// let arr=[
//     [1,2,3],
//     [4,[5,55,555],6],
//     [7,8,9]
// ]

// // console.log(arr[2]);//[ 7, 8, 9 ]
// // console.log(arr[2][1]);//8
// // console.log(arr[1]);//[ 4, [ 5, 55, 555 ], 6 ]
// // console.log(arr[1][1]);//[ 5, 55, 555 ]
// // console.log(arr[1][1][2]);//555

// for(let i=0;i<arr.length;i++){
//     // console.log(arr[i]);
//     for(let j=0;j<arr[i].length;j++){
//         console.log(arr[i][j]);
//         for(let z=0;z<arr[i][j].length;z++){
//             console.log(arr[i][j][z]);
//         }
//     }

// }

// let arr2=[
//     [1,2,3],
//     [4,5,6],
//     [7,8,9]
// ]

// // 八、扩展运算符：  ...
// let a=["Tom","Marry"];
// let b=[12,15];
// let c=[...a,...b];
// console.log(c);//[ 'Tom', 'Marry', 12, 15 ]
// // 注意：1.使用扩展运算符必须要展开在数组中，或者展开在函数参数中
// let arr=[23,1,5,8,45,9];
// console.log(Math.max(...arr));//45
// console.log(Math.min(...arr));//1

// // 使用扩展运算符，可以快速的把字符串转成数组
// let str="hello";
// let arr2=[...str];
// console.log(arr2);//[ 'h', 'e', 'l', 'l', 'o' ]


// 回文数
// let num="1234567890987654321";
// let arr=[...num];
// console.log(arr);//['1', '2', '3','4']
// let newNum="";
// for(let i=arr.length-1;i>=0;i--){
//     newNum+=arr[i];
// }
// console.log(newNum);
// if(num==newNum){
//     console.log("是回文数！");
// }else{
//     console.log("不是回文数！");

// }


// 数组的属性：值不是函数；没有小括号
// 数组的方法：值是函数；有小括号

// 九、数组的属性
// 1.length属性：数组的长度
// let arr=[23,1,5,8,45,9];
// console.log(arr.length);//6
// arr.length=3;//控制数组的长度，相当于删除数组后面的内容
// console.log(arr);//[ 23, 1, 5 ]

// 十、数组的方法
// （一）插入:在原数组的基础上改变
// let arr=[1,2,3];
// // 1.push():从数组的后面插入内容；插入的数据没有数量和类型限制;返回值是数组的最新长度
// let a=arr.push(4,"hello",[5,6]);//用一个变量来接受push方法的返回值
// console.log(arr);//[ 1, 2, 3, 4, 'hello', [ 5, 6 ] ]
// console.log(a);//6 表示数组插入数据之后的长度

// // 2.unshift():从数组的前面插入内容；插入的数据没有数量和类型限制;返回值是数组的最新长度
// let b=arr.unshift("red","blue");
// console.log(arr);//[ 'red', 'blue', 1, 2, 3, 4, 'hello', [ 5, 6 ] ]
// console.log(b);//8

// // （二）删除:在原数组的基础上改变;同时删除内容和位置
// // 1.pop():从数组后面删除数据;每次删除一个数据;返回值是被删掉的数据
// let c=arr.pop();
// console.log(arr);//[ 'red', 'blue', 1, 2, 3, 4, 'hello' ]
// console.log(c);//[ 5, 6 ]

// // 2.shift():从数组的前面删除数据；每次删除一个数据;返回值是被删掉的数据
// let d=arr.shift();
// console.log(arr);//[ 'blue', 1, 2, 3, 4, 'hello' ]
// console.log(d);//red

// // （三）综合方法：splice():集删除、插入、替换于一体的方法
// // 1.删除
// // splice(起始下标,删除内容的个数)
// let e=arr.splice(3,2);
// console.log(arr);//[ 'blue', 1, 2, 'hello' ]
// console.log(e);//[ 3, 4 ]  返回值是被删掉的内容所组成的数组

// // 2.插入
// // splice(起始下标,删除内容的个数，后面的所有参数表示插入的内容)
// let f=arr.splice(3,0,66,77,88,99);
// console.log(arr);//[ 'blue', 1, 2, 66, 77, 88, 99, 'hello' ]
// console.log(f);//[] 因为没有被删掉的内容

// // 3.替换=删除+插入  （注意：删除和插入的个数没有限制）
// // splice(起始下标,删除内容的个数，后面的所有参数表示插入的内容)
// let g=arr.splice(1,2,"hello","world","成都");
// console.log(arr);//[ 'blue',"hello","world","成都", 66, 77, 88, 99, 'hello' ]
// console.log(g);//[ 1, 2 ]


// 练习：保留数组中的奇数
// let arr=[12,4,2,5,4,6,8,7,1];
// for(let i=0;i<arr.length;i++){
//     if(arr[i]%2==0){
//         arr.splice(i,1);
//         i--;
//         // 因为使用splice删除一个数据，同时会把这个数据的位置删除，后面的数据会自动向前进一位
//         // 如果没有下标减减，就会直接下标向后一位，那么之前前进一位的数字就会被跳过，没有进行偶数判断，可能会导致偶数没有被删除
//     }
// }
// console.log(arr);

// （四）增加内容方法：concat(),不会改变原数组，会在新的副本后面增加内容
// let arr=[1,2,3];
// let arr2=arr.concat(4,5,6);
// console.log(arr);//[ 1, 2, 3 ]
// console.log(arr2);//[ 1, 2, 3, 4, 5, 6 ]

// (五)截取数组内容：slice(),不会改变原数组,截取之后会得到一个新数组
// let arr=[1,2,3,4,5,6,7];
// // slice(起始下标位置)
// let newArr=arr.slice(2);//从下标2开始，一直截取到末尾
// console.log(newArr)//[ 3, 4, 5, 6, 7 ]
// // slice(起始下标位置,表示结束位置后一项的下标)
// let newArr2=arr.slice(2,5);
// console.log(newArr2)

// （六）把数组转成字符串:join()
// let arr=[1,2,3];
// let str=arr.join("");//括号中传入的字符串表示分隔符
// console.log(str);//123

// （七）把字符串转成数组：split()
// 方法一：扩展运算符（...）
// let str="hello world";
// let arr=[...str];
// console.log(arr);//['h', 'e', 'l', 'l','o', ' ', 'w', 'o','r', 'l', 'd']
// // 方法二：
// let arr2=str.split(" ");
// console.log(arr2)//[ 'hello', 'world' ]
// let arr3=str.split("o");
// console.log(arr3);//[ 'hell', ' w', 'rld' ]

// 